// async函数和promise
// setTimeout(() => {
//   console.log(1);

// }, 1000)
// console.log(2);

// function getIndex(bool: boolean) {
//   return new Promise<number>((resolve, reject) => {
//     setTimeout(() => {
//       console.log(1)
//       if (bool) {
//         resolve(123)
//       } else {
//         reject(new Error('错误对象'))
//       }
//     }, 1000)
//   })
// }

// getIndex()
//   .then(res => {
//     console.log(res)
//     console.log(2)
//   })
//   .catch(err => {
//     console.log(err)
//   })

// async function asyncFunction() {
//   try {
//     const res = await getIndex(true)
//     console.log(res)
//   } catch (error) {
//     console.log(error)
//   }
// }

// asyncFunction()

// interface Res {
//   data: {
//     [key: string]: any
//   }
// }

// namespace axios {
//   export function post(url: string, config: Res): Promise<Res> {
//     return new Promise((resolve, reject) => {
//       setTimeout(() => {
//         const res: Res = config
//         if (url === '/login') {
//           res.data.user_id = 111
//         } else {
//           res.data.role = 'admin'
//         }
//         console.log(2)

//         resolve(res)
//       })
//     })
//   }
// }

// interface Info {
//   user_name: string
//   password: string
// }

// async function loginReg({ user_name, password }: Info) {
//   try {
//     console.log(1)
//     const res = await axios.post('/login', {
//       data: {
//         user_name,
//         password,
//       },
//     })
//     console.log(3)
//     return res
//   } catch (error) {
//     console.log(error)
//   }
// }

// async function getRoleReq(user_id: number) {
//   try {
//     const res = await axios.post('/user_roles', {
//       data: {
//         user_id,
//       },
//     })
//     console.log(4)
//     return res
//   } catch (error) {
//     console.log(error)
//   }
// }
// loginReg({ user_name: '胭脂', password: '123' }).then(async res => {
//   if (res) {
//     const {
//       data: { user_id },
//     } = res
//     const res1 = await getRoleReq(user_id)
//     console.log(res1)
//   }
// })

// 动态引入
// async function getTime(format: string) {
//   const moment = await import('moment')
//   return moment.default().format(format)
// }

// getTime('L').then(res => {
//   console.log(res)
// })
// // 弱类型探测
// interface ObjIn {
//   name?: string
//   age?: number
// }

// const obj = {
//   sex: 'man',
// }
// function printInfo(info: ObjIn) {
//   console.log(info)
// }

// printInfo(obj as ObjIn)

//...
// function mergeOptions(opt1: object, opt2: object) {
//   return { ...opt1, ...opt2 }
// }

// function mergeOptions<T, U extends string>(opt1: T, opt2: U) {
//   return { ...opt1, opt2 }
// }

// // console.log(mergeOptions({ a: 'a' }, 'name'))
// function getExcludeProp<T extends { props: string }>(obj: T) {
//   const { props, ...rest } = obj
//   return rest
// }
// const objInfo = {
//   props: 'something',
//   name: '胭脂',
//   age: 18,
// }
// console.log(getExcludeProp(objInfo))
